<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>
    第九课.
    Number类型.
    错误处理.
    function对象.
    重载.
    ❤ 闭包.
  </title>
</head>
<body>

Number 类型的API
str = num.toFixed(μ) 按n位小数四舍五入，返回一个字符串！ ❤ 计算结束后调用
Math.round(num) 只能取整，返回一个字符串
num.toString(n) 按照N进制


<!-- ==================================================== -->

错误处理 --> 错误导致程序运行停止的运行时异常状态，{}保证程序正常运行

错误类型：
Error类型：所有错误对象的父类型

6种子类型
EvaError
RangeError 参数超出范围
ReferenceError 引用错误：找不到对象 ❤ 只要使用未声明的变量都会抛出ReferenceError
SyntaxError: 语法错误：代码写错了
TypeError: 类型使用错误
URIError: URI错误

如何处理错误：(当可能会遇到无法预料的问题)
try{
可能出错的代码
}catch(err){ 只要抛出错误，都会创建一个Error对象
错误处理的代码
1. 获得错误信息：
err.message： 错误信息
err.name: 错误类型
2. 根据错误的类型，执行不同的处理
}[finally]{
❤ 程序中使用了大的对象 一定要在finally中主动释放
无论是否出错，都必须执行的代码 (善后)
}

主动抛出自定义异常：
throw new Error('自定义的错误信息');

<!-- ==================================================== -->

function 对象
function fun(){} 方法声明 (方法声明提前，作用域)
var fun = new Function()
var fun = function(){}

重载：方法，根据传入参数列表不同，执行不同的任务 ❤ js语法不支持重载，但可以模拟
@example
func jiezang(money){//现金结账：找零}
func jiezang(cardid,pwd){//刷卡，验证密码}

arguments对象： 方法对象中保存所有参数的类数组对象。
arguments.length: 变量的个数
arguments[i]:访问变量

<!-- ==================================================== -->

匿名函数：
1.回调函数：函数何时执行，程序员不需要控制，由所在的环境自动调用
@example 比较器：arr.sort(function(a,b){return a-b;})
2.自调函数
@example (function(){})(); 立即调用

<!-- ==================================================== -->

闭包(closure)：函数外使用了不属于自己的局部变量;
保护局部变量。



<script>
  // @example 做一个重载~
  function calc() {
    if (arguments.length == 1) {
      var n = parseFloat(arguments[0]);
      return Math.pow(n, 2);
    } else {
      var j = parseFloat(arguments[0]);
      var m = parseFloat(arguments[1]);
      return j + m;
    }
  }
  calc(5);

  // @example 是否为空
  function isEmpty(str) {
    if (str === undefined) {
      return true;
    } else if (str == null) {
      return true;
    }else{
      var reg = /^\s*$/;
      return reg.test(str);
    }
  }


  /**
   * javaScript 闭包
   * ❤
   */
</script>
</body>
</html>
